package com.itheima.controller;

import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Controller
public class FileUploadController {

    @RequestMapping(value = "/fileupload")
    //参数中定义MultipartFile参数，用于接收页面提交的type=file类型的表单，要求表单名称与参数名相同
    public String fileupload(@RequestParam("file") MultipartFile file1, MultipartFile file2, MultipartFile file3, HttpServletRequest request) throws IOException {
        // System.out.println("file upload is running ...");
        // file1.transferTo(new File("file1.png"));

        // 该文件字节数
        // System.out.println("file1.getSize() = " + file1.getSize());
        // 该文件的字节数组对象
        // System.out.println("file1.getBytes().length = " + file1.getBytes().length);
        // 文件类型:image/jpeg
        // System.out.println("file1.getContentType() = " + file1.getContentType());
        // 文件名称:file
        // System.out.println("file1.getName() = " + file1.getName());
        // 原始名称
        // System.out.println("file1.getOriginalFilename() = " + file1.getOriginalFilename());
        // 是否为空
        // System.out.println("file1.isEmpty() = " + file1.isEmpty());

        // 首先判断是否为空文件，也就是存储空间占用为0的文件
        if (!file1.isEmpty()){
            // 大小在要求范围正常处理
            // 获取上传文件名，作为当前文件真实名称保存到数据库备用
            String fileName = file1.getOriginalFilename();
            // 设置保存路径，获取绝对路径
            String realPath = request.getServletContext().getRealPath("/images");
            // 判断该文件夹是否存在
            if (! new File(realPath).exists()){
                // mkdirs可以创建子文件夹
                new File(realPath).mkdirs();
            }
            // 获得原始文件后缀
            String suffix = fileName.substring(fileName.lastIndexOf("."));
            // UUID生成策略，作为文件名
            String newFileName = UUID.randomUUID().toString().replaceAll("-", "");
            // 得到新的文件名称(不重复)
            String nFileName = newFileName+suffix;
            // 上传
            file1.transferTo(new File(realPath,nFileName));
        }

        // 测试一次性上传多个
        if (!file2.isEmpty()){
            String filename = file2.getOriginalFilename();
            // 保存位置
            String realPath = request.getServletContext().getRealPath("/images");
            // 判断该文件夹是否存在
            if (! new File(realPath).exists()){
                // mkdirs可以创建子文件夹
                new File(realPath).mkdirs();
            }
            // 上传
            file2.transferTo(new File(realPath,file2.getOriginalFilename()));
        }
        if (!file3.isEmpty()){
            String filename = file3.getOriginalFilename();
            // 保存位置
            String realPath = request.getServletContext().getRealPath("/images");
            // 判断该文件夹是否存在
            if (! new File(realPath).exists()){
                // mkdirs可以创建子文件夹
                new File(realPath).mkdirs();
            }
            // 上传
            file3.transferTo(new File(realPath,file3.getOriginalFilename()));
        }

        return "page.jsp";
    }
}
